package Seletores;

import java.util.ArrayList;

public class SeletoresContinuos {	
	private BaseProbabilidadeContinua probabilidadesBase;
	
	public SeletoresContinuos( BaseProbabilidadeContinua probabilidadesBase ) {
		this.probabilidadesBase = probabilidadesBase;
	}
	
	public ArrayList<Integer> mIFs(int numFeatures, double beta){
		
		int dimensoes = probabilidadesBase.getBase().get(0).length - 1;
		
		ArrayList<Integer> features = new ArrayList<>();
		int classe = dimensoes;
		
		for (int k = 0; k < numFeatures; k++) {
			double valueR[] = new double[dimensoes];
			for (int i = 0; i < valueR.length; i++) {
				if(features.contains(i)){
					valueR[i] = - Double.MAX_VALUE;
				} else {
					double infMutuaFeat = 0;
					for (int f : features) {
						infMutuaFeat += probabilidadesBase.getInformacaoMutua(i, f);
					}
					valueR[i] = probabilidadesBase.getInformacaoMutua(i, classe) - beta * infMutuaFeat;			
				}
			}
			int maior = 0;
			for (int j = 1; j < valueR.length; j++) {
				if(valueR[maior] < valueR[j]){
					maior = j;
				}
			}
			System.out.println("Mifs - feature " + k + " : " + maior + 1);
			features.add(maior);
		}
		
		return features;
	}
}
